LuCloud 1 Implementation Levels of Virtualization

LuCloud 1 Implementation Levels of Virtualization

五月 01, 2019

cover

​ 选修了一门“云数据管理”,认真学习一哈。

​ 这里对Distributed and Cloud Computing这本书的Virtual Machines and Virtualization of Clusters and Data Centers章节的第一小结做了一些梳理和总结。

a

Overview

​ 虚拟化Virtualization是一种计算机体系结构技术,通过该技术,多个虚拟机(VM)在同一硬件机器中被多路复用。VM的目的是增强许多用户的资源共享,并在资源利用率和应用灵活性方面提高计算机性能。硬件资源(CPU,存储器,I / O设备等)或软件资源(操作系统和软件库)可以在各种功能层中虚拟化。

​ 传统计算机使用专为其硬件架构量身定制的主机操作系统运行,如下图(a)所示。在虚拟化之后,由其自己的操作系统(客户OS)管理的不同用户应用程序可以在相同的硬件上运行,而与主机OS无关。这通常通过添加额外的软件来完成,称为virtualization layer,如下图(b)所示。此虚拟化层称为hypervisorvirtual machine monitor(VMM)。虚拟机显示在上方框中,其中应用程序通过虚拟化CPU,内存和I / O资源在其自己的客户OS上运行。

1

​ 用于虚拟化的软件层的主要功能是将主机的物理硬件虚拟化为虚拟资源以供VM使用。这可以在不同的操作级别实现。虚拟化软件通过在计算机系统的各个级别插入虚拟化层来创建VM的抽象。常见的虚拟化层包括指令集架构(ISA)级别,硬件级别,操作系统级别,库支持级别和应用程序级别(参见下图),之后将详细说明。

2

Instruction Set Architecture Level

ISA层的虚拟化是通过利用主机的ISA模拟给定的ISA来实现的。例如,MIPS二进制代码可以在ISA仿真的帮助下在基于x86的主机上运行。通过这种方法,可以在任何给定的新硬件主机上运行为各种处理器编写的大量遗留二进制代码。指令集仿真导致了在任何硬件机器上创建的虚拟ISA的产生。

基本的仿真方法是通过代码解释code interpretation:解释程序将源指令逐个解释为目标指令。一个源指令可能需要数十或数百个本机目标指令来执行其功能。显然,这个过程相对较慢。为了获得更好的性能,需要动态二进制转换dynamic binary translation。该方法将动态源指令的基本块转换为目标指令。基本块也可以扩展到程序轨迹或超级块,以提高转换效率。指令集仿真需要二进制转换和优化。因此,虚拟指令集架构(V-ISA)需要将特定于处理器的软件转换层添加到编译器。

Hardware Abstraction Level

概述

硬件级虚拟化直接在裸硬件上执行。一方面,这种方法为VM生成虚拟硬件环境。另一方面,该过程通过虚拟化管理底层硬件。其想法是虚拟化计算机的资源,例如其处理器,内存和I / O设备。目的是同时升级多个用户的硬件利用率。这个想法是在20世纪60年代的IBM VM / 370中实现的。最近,Xen虚拟机管理程序已应用于虚拟化基于x86的计算机以运行Linux或其他来宾操作系统应用程序。我们将在3.3节中更详细地讨论硬件虚拟化方法。

Operating System Level

概述

这是指传统操作系统和用户应用程序之间的抽象层。操作系统级虚拟化在单个物理服务器和操作系统实例上创建隔离容器containers,以利用数据中心中的硬件和软件。容器的行为类似于真实的服务器。操作系统级虚拟化通常用于创建虚拟主机环境,以在大量相互不信任的用户之间分配硬件资源。通过将单独主机上的服务移动到一台服务器上的容器或VM中,它还在较小程度上用于整合服务器硬件。

云计算

云计算正在通过将管理计算中心的硬件和人员成本转移到第三方来改变计算环境,就像银行一样。然而其面临两个挑战:

  • 第一是根据问题的需要使用可变数量的物理机和VM实例的能力。例如,在某些执行阶段,任务可能只需要一个CPU,但在其他时间可能需要数百个CPU。
  • 第二个挑战涉及实例化新VM的缓慢运行时间。目前,新VM起源于新启动或模板VM的复制品,不知道当前的应用程序状态。

为什么需要OS-Level虚拟化?

  • 初始化硬件级VM很慢,因为每个VM都从头开始创建自己的映像。而在云计算环境中,可能需要同时初始化数千个VM。
  • 除了运行缓慢之外,存储VM映像也成为一个问题。事实上,VM映像之间存在相当多的重复内容。
  • 此外,硬件级别的完全虚拟化还具有性能低和密度低的缺点,以及需要半虚拟化来修改客户OS。
  • 为了降低硬件级虚拟化的性能开销,甚至需要进行硬件修改。

OS-Level虚拟化如何进行?

  • 操作系统虚拟化在操作系统内插入虚拟化层以对计算机的物理资源进行分区。它在单个操作系统内核中启用多个隔离的VM。这种VM通常被称为虚拟执行环境virtual execution environment(VE),虚拟专用系统Virtual Private System(VPS),或容器container

  • 从用户的角度来看,VE看起来像真正的服务器。这意味着VE具有自己的一组进程,文件系统,用户帐户,具有IP地址的网络接口,路由表,防火墙规则和其他个人设置。虽然可以为不同的人定制VE,但它们共享相同的操作系统内核。因此,OS级虚拟化也称为单OS映像虚拟话single-OS image virtualization。下图从机器堆栈的角度说明了操作系统虚拟化。

oslevel

OS-Level虚拟化的优点

  • 操作系统级别的虚拟机具有最小的启动/关闭成本,低资源要求和高可扩展性;
  • 对于OS级VM,VM及其主机环境可以在必要时同步状态变化。

这两个优点基于以下两个OS-Level虚拟化机制实现:

  • 同一台物理计算机上的所有操作系统级虚拟机共享一个操作系统内核;
  • 虚拟化层的设计方式允许VM中的进程尽可能多地访问主机的资源,但永远不要修改它们。

这两个优点分别用于克服以下缺陷:

  • 硬件级别的VM缓慢初始化;
  • 不知道当前应用状态。

OS-Level虚拟化的缺陷

由于OS-Level虚拟化是通过在单个操作系统内核中启用多个隔离的VM实现的,因此要求所有的VM的客户OS必须属于相同类别,这对期望同时具有windows和linux系统的情形产生了挑战。

在OS-Level虚拟化过程中,需要将来自VM的访问请求重定向到物理机上的VM本地资源分区当中。例如

例如,UNIX系统中的chroot命令可以在主机OS中创建多个虚拟根目录。这些虚拟根目录是创建的所有VM的根目录。有两种方法可以实现虚拟根目录:将公共资源复制到每个VM分区;或者与主机环境共享大多数资源,并且只在VM上按需创建私有资源副本。第一种方式会导致物理机器上的大量资源成本和开销。与硬件辅助虚拟化相比,此问题可以消除操作系统级虚拟化的优势。因此,操作系统级虚拟化通常是第二选择。

Virtualization Support for the Linux Platform

Virtualization Support and Source of Information Brief Introduction on Functionality and Application Platforms
Linux vServer for Linux platforms (http://linuxvserver.org/) Extends Linux kernels to implement a security mechanism to help build VMs by setting resource limits and file attributes and changing the root environment for VM isolation
OpenVZ for Linux platforms; http://ftp.openvz.org/doc/OpenVZ-Users-Guide.pdf) Supports virtualization by creating virtual private servers (VPSes); the VPS has its own files, users, process tree, and virtual devices, which can be isolated from other VPSes, and checkpointing and live migration are supported
FVM (Feather-Weight Virtual Machines) for virtualizing the Windows NT platforms) Uses system call interfaces to create VMs at the NY kernel space; multiple VMs are supported by virtualized namespace and copy-on-write

Library Support Level

概述

Library-level虚拟化也称为用户级应用程序二进制接口Application Binary Interface(ABI)或API仿真。这种类型的虚拟化可以创建用于在平台上运行外来程序的执行环境,而不是创建运行整个操作系统的VM。 API调用拦截和重新映射是执行的关键功能。

大多数应用程序使用由用户级库导出的API,而不是使用操作系统的冗长系统调用。由于大多数系统提供记录良好的API,因此这种接口成为虚拟化的另一个候选者。通过API挂钩控制应用程序与系统其余部分之间的通信链接,可以实现具有库接口的虚拟化。软件工具WINE已经实现了这种方法,以支持UNIX主机上的Windows应用程序。另一个例子是vCUDA,它允许在VM中执行的应用程序利用GPU硬件加速。

实例

Middleware or Runtime Library and References or Web Link Brief Introduction and Application Platforms
WABI (http://docs.sun.com/app/docs/doc/802-6306) Middleware that converts Windows system calls running on x86 PCs to Solaris system calls running on SPARC workstations
Lxrun (Linux Run) (http://www.ugcs.caltech.edu/~steven/lxrun/) A system call emulator that enables Linux applications written for x86 hosts to run on UNIX systems such as the SCO OpenServer
WINE (http://www.winehq.org/) A library support system for virtualizing x86 processors to run Windows applications under Linux, FreeBSD, and Solaris
Visual MainWin (http://www.mainsoft.com/) A compiler support system to develop Windows applications using Visual Studio to run on Solaris, Linux, and AIX hosts
vCUDA (IEEE IPDPS 2009) Virtualization support for using general-purpose GPUs to run data-intensive applications under a special guest OS

User-Application Level

应用程序级别的虚拟化将应用程序虚拟化为VM。在传统的操作系统上,应用程序通常作为一个进程运行。因此,应用程序级虚拟化也称为进程级虚拟化。最流行的方法是部署高级语言(HLL)VM。在这种情况下,虚拟化层作为应用程序位于操作系统之上,并且该层导出VM的抽象,该VM可以运行编写并编译到特定抽象机器定义的程序。在HLL中编写并为此VM编译的任何程序都可以在其上运行。 Microsoft .NET CLR和Java虚拟机(JVM)是此类VM的两个很好的示例。其他形式的应用程序级虚拟化称为应用程序隔离,应用程序,沙盒或应用程序流。该过程涉及将应用程序包装在与主机OS和其他应用程序隔离的层中。结果是一个更容易分发和从用户工作站中删除的应用程序。 LANDesk应用程序虚拟化平台就是一个例子,它将软件应用程序部署为隔离环境中的自包含可执行文件,无需安装,系统修改或提升安全权限。